#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *

class mapa:				# Cada mapa de 32x32 es un objeto
	def __init__(self,main,mapa,numero):
		self.tiles = {}
		self.tiles["0"] = None
		self.matris = []
		self.x = 0
		self.y = 0
		self.nx = numero[0]
		self.ny = numero[1]
		alt = main["mapa"]["tile_altura"]
	
		loop = True								# Comprueba que los tiles que va a usar se encuentran en el diccionario "main["mapa"]["tiles"]",
		i = 1									# si no estan los agrega
		while loop:
			if str(i) in mapa:
				if not mapa[str(i)] in main["mapa"]["tiles"]:
					surface = pygame.image.load(mapa[str(i)]).convert_alpha()
					main["mapa"]["tiles"][mapa[str(i)]] = pygame.transform.smoothscale(surface, (alt+alt, alt))
				self.tiles[str(i)] = main["mapa"]["tiles"][mapa[str(i)]]
			else:
				loop = False
			i += 1
		
		for y in range(32):						# Genera la posicion de cada imagen de acuerdo a la resolucion
			for x in range(32):
				xpos = alt*(x-y)
				ypos = alt*(x+y)/2
				n = mapa["suelo"][y][x]
				self.matris.append([n,xpos,ypos])
		
		self.img = pygame.Surface((alt*65,alt*32)).convert() # Crea una imagen que contine todo el mapa
		self.img.fill((255,255,255))
		self.img.set_colorkey((255,255,255),pygame.RLEACCEL)
		
		for a in self.matris:			# Imprime toda el suelo en la imagen grande
			x = a[1]
			y = a[2]
			if self.tiles[a[0]]:
				self.img.blit(self.tiles[a[0]],(x+alt*32,y))
		
	def proceso(self,main):
		alt = main["mapa"]["tile_altura"]	# Calcula la posicion del mapa en la pantalla
		mapa0 = main["camara"]["mapa"]
		pos0 = main["camara"]["posicion"]
		self.x = main["general"]["rect"].centerx-(alt*(pos0[0]-pos0[1]))-(alt*32*(mapa0[0]-self.nx-mapa0[1]+self.ny))-alt*32
		self.y = main["general"]["rect"].centery-(alt*(pos0[0]+pos0[1])/2)-(alt*32*(mapa0[0]-self.nx+mapa0[1]-self.ny)/2)
	
	def graficar(self,main):
		main["general"]["pantalla"].blit(self.img,(self.x,self.y))	# Imprime la imagen grande segun la posicion que calculo
			
